#set text(font: ("Sarasa Fixed Slab SC"), lang:("zh"))
#show math.equation: set text(font: "Neo Euler")

#outline()

= 卷积层

一个全连接层的前向推理可以表示为另一个视角：

$
  [bold(Y)]_(i,j) = text("bias")_(i,j) + sum_(k,l) [bold(W)]_(i,j,k,l)[bold(X)]_(k,l)
$

这完全是基于图像处理这个场景下的变换，当然，这只是一种表示，并没有改变全链接层本身。

首先尝试在其中加入局部性，这是相对简单的。一个 $[bold(Y)]_(i,j)$ 不再考虑整张图片，而是一个有限的范围（或者生动些，一个镜头的范围）：

$
  [bold(Y)]_(i,j) = text("bias")_(i,j) + sum_(abs(k-i)<=Delta,abs(l-j)<=Delta) [bold(W)]_(i,j,k,l)[bold(X)]_(k,l)
$

它可以进一步写成 $[bold(Y)]_(i,j) = text("bias")_(i,j) + limits(sum)_(abs(delta i)<=Delta,abs(delta j)<=Delta) [bold(W)]_(i,j,i+delta i,j+delta j)[bold(X)]_(i+delta i,j+delta j)
$，很小的坐标变换。

接下来加入平移不变性。考虑输入图片 $bold(X)$ 的一个特征（比如一只猫），其在原图中的位置平移而形状颜色等特征不变时，根据我们的公式，它会被不同的 $[bold(Y)]_(i,j)$ 看到。

这里有一个陷阱：平移不变性并不等同于猫和同一个 $[bold(Y)]_(i,j)$ 的相对位置怎么改变结果都不变。同一个 $[bold(Y)]_(i,j)$ 以不同的相对位置看到这只猫，或者生动些，$[bold(Y)]_(i,j)$ 看到的它偏向于镜头的哪一侧————当然应该得到不同的结果。

平移不变性真正要求的是在不同的 $[bold(Y)]_(i,j)$ 以相同的相对位置看到同一只猫时结果相同。

所以平移不变性实际上是在促使我们将 $bold(W)$（当然还有 $text("bias")$） 与 $i,j$ 解耦，得到的公式是：

$
  [bold(Y)]_(i,j) = text("bias") + limits(sum)_(abs(delta i)<=Delta,abs(delta j)<=Delta) [bold(W)]_(delta i,delta j)[bold(X)]_(i+delta i,j+delta j)
$

卷积体现在哪里呢？只要 swap($[bold(W)]_(delta i,delta j)$, $[bold(W)]_(-delta i,-delta j)$) 就能看到形式上的卷积，而这本质上什么也没有改变。

不过书中又提到卷积是个错误叫法，我完全认同。

虽然没有时序上的生动动画，但读者应该能明白这就是我们经常看到的那个卷积层。

= 池化层

我们之前说了，平移不变性并不要求一个卷积核以不同相对位置看到同一个物体时结果不变，但实际上也不应该对相对位置过于敏感。

池化层就是降低敏感度的。

